package com.example.android.ouactivity.utils;


import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ImageView;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;


/**
 * Created by 庆 on 2016/11/17.
 * 自定义的简单的网络请求类
 * 后续可能需要继续完善
 */

public class CustomHttp {
    //定义网站的ip地址，因为真机测试时，手机访问的是手机所在的局域网里的电脑主机的ip
    private String localhost="http://www.chqing.cn/";
    //private String localhost="";https://gist.githubusercontent.com/K-line/15dbf888d212fb89d6c60552434f29f2/raw/064c98cce8d749837ed8c64c050d8bb671276c55/data.json
    private HttpURLConnection conn;
    public CustomHttp(){
    }

    int responseCode;
    public String getWebResultByGet(String urlParam){
        String result = "";
        try{
            URL url = new URL(localhost+urlParam);
            conn = (HttpURLConnection)url.openConnection();

            conn.setRequestMethod("GET");//设置方法。默认是get
            conn.setReadTimeout(5000);//设置从主机读取数据超时（单位：毫秒）
            conn.setConnectTimeout(10000);//设置连接主机超时（单位：毫秒）
            //获取Http状态码
            responseCode = conn.getResponseCode();
            if (responseCode == 200) {

                InputStream is = conn.getInputStream();
                result = getStringFromInputStream(is);
                return result;
            } else {
                Log.i("网络访问：", "访问失败" + responseCode);
            }
        }catch (MalformedURLException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if (conn != null) {
                conn.disconnect();
            }
        }
        return null;
    }

    /**
     * 通过post方法来获得服务器数据
     * @param urlParam 仅仅是localhost之后的内容
     * @param postStr 形式：key=value&key=value&...&key=value的字符串
     * @return
     */
    public String getWebResultByPost(String urlParam,String postStr){

        try {
            //实例化url
            URL url = new URL(localhost+urlParam);
            //调用URL的openConnection()方法,获取HttpURLConnection对象
            conn = (HttpURLConnection)url.openConnection();
            // 设置请求方法为post
            conn.setRequestMethod("POST");
            // 设置读取超时为10秒
            conn.setReadTimeout(10000);
            // 设置连接网络超时为10秒
            conn.setConnectTimeout(15000);
            // 设置此方法,允许向服务器输出内容,默认情况下,系统不允许向服务器输出内容,
            conn.setDoOutput(true);
            // post请求的参数(形式：key=value&key=value&...&key=value)
            String data = postStr;
            // 获得一个输出流,向服务器写数据
            OutputStream outputStream = conn.getOutputStream();
            outputStream.write(data.getBytes());//写入数据
            outputStream.flush();//刷新
            outputStream.close();//关闭，不能再写入数据
            int responseCode = conn.getResponseCode();// 获取Http状态码，调用此方法就不必再使用conn.connect()方法
            if (responseCode == 200){
                //获得输入流
                InputStream is = conn.getInputStream();
                String result = getStringFromInputStream(is);
                return result;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            conn.disconnect();
        }
        return null;
    }



    /**
     * 根据流返回一个字符串信息
     * @param is
     * @return
     * @throws IOException
     */
    private static String getStringFromInputStream(InputStream is)
            throws IOException {
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        // 模板代码 必须熟练
        byte[] buffer = new byte[1024];
        int len = -1;
        // 一定要写len=is.read(buffer)
        // 如果while((is.read(buffer))!=-1)则无法将数据写入buffer中
        while ((len = is.read(buffer)) != -1) {
            os.write(buffer, 0, len);
        }
        is.close();
        String state = os.toString();// 把流中的数据转换成字符串,采用的编码是utf-8(模拟器默认编码)
        os.close();
        return state;
    }


}
